今天要介紹的是 expr,他可以讓我們在不使用 aggregate 的情況下進行一些簡易的表達式操作,節省我們編寫程式碼的時間
語法:{ $expr: { } }
下方範例中可以看到,我們透過表達式印出 A3 事故數量大於 A2 事故數量的所有資料,並且將路口名稱以及統計資訊印出來,方便進行範例展示
import os
from pathlib import Path
from dotenv import load_dotenv
from pymongo.database import Database
from pymongo.collection import Collection
from pymongo.mongo_client import MongoClient
from pprint import pprint
# 讀取 .env 取得連線資訊
BASE_DIR = Path(__file__).parent.parent
load_dotenv(str(BASE_DIR / ".env"))
# 建立 client 並與 db、collection 進行連線
client = MongoClient(host=os.getenv("MONGODB_ATLAS_URL"))
database = Database(client=client, name="HighRiskIntersection")
collection = Collection(database=database, name="Intersection")
print("---- demo expr ----")
result = collection.find(
{"$expr": {"$gte": ["$statistics.A3_amount", "$statistics.A2_amount"]}},
{"intersection": 1, "statistics": 1},
limit=5
)
pprint(list(result))
client.close()
下圖中可以看到我們抓出來的資料全部都符合我們表達式中的條件